﻿@page "/"
@layout MainLayout
@inject HttpClient HttpClient
@inject NavigationManager NavigationManager
@inject OrderState OrderState

<div class="main">
    <ul class="pizza-cards">
        @foreach (var special in specials ?? new())
        {
            <li @onclick="@(() => OrderState.ShowConfigurePizzaDialog(special))" 
                style="background-image: url('@special.ImageUrl')">
                <div class="pizza-info">
                    <span class="title">@special.Name</span>
                    @special.Description
                    <span class="price">@special.GetFormattedBasePrice()</span>
                </div>
            </li>
        }
    </ul>
</div>

@if (OrderState.ShowingConfigureDialog)
{
    <ConfigurePizzaDialog Pizza="OrderState.ConfiguringPizza"
        OnCancel="OrderState.CancelConfigurePizzaDialog"
        OnConfirm="OrderState.ConfirmConfigurePizzaDialog" />
}

<div class="sidebar @(order.Pizzas.Any() ? "with-total" : "")">
    @if (order.Pizzas.Any())
    {
        <div class="order-contents">
            <h2>Your order</h2>

            @foreach (var configuredPizza in order.Pizzas)
            {
                <div class="cart-item">
                    <a @onclick="@(() => OrderState.RemoveConfiguredPizza(configuredPizza))" 
                        class="delete-item">❌</a>
                    <div class="title">@(configuredPizza.Size)" @configuredPizza.Special!.Name</div>
                    <div class="item-price">
                        @configuredPizza.GetFormattedTotalPrice()
                    </div>
                </div>
            }
        </div>
    }
    else
    {
        <div class="empty-cart">Choose a pizza<br>to get started</div>
    }

    <div class="order-total @(order.Pizzas.Any() ? "" : "hidden")">
        Total:
        <span class="total-price">@order.GetFormattedTotalPrice()</span>
        <a href="checkout" class="@(OrderState.Order.Pizzas.Count is 0 ? "btn btn-warning disabled" : "btn btn-warning")">
            Order >
        </a>
    </div>
</div>

@code {
    List<PizzaSpecial>? specials = new();
    Order order => OrderState.Order;

    protected override async Task OnInitializedAsync() => 
        specials = await HttpClient.GetFromJsonAsync<List<PizzaSpecial>>(
            $"{NavigationManager.BaseUri}specials");
}
